package com.example.fengyungo.dao;

import com.example.fengyungo.domain.pojo.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserDao {

    /**
     * 根据用户名和密码查询用户
     *
     * @param username 用户名（账号）
     * @param password 密码
     * @return List<User>
     */
    @Select("select * from user where userUsername = #{username} and userPassword = #{password}")
    List<User> getUserByUsernameAndPassword(@Param("username") String username, @Param("password") String password);

    /**
     * 新增用户
     *
     * @param user User
     * @return Boolean
     */
    @Insert("insert into user (userId, userUsername, userSex, userPhone, userPassword, userIdCard, userAvatar, userStatus, userCreateTime, userNickname, userMail) VALUES " +
            "(#{userId}, #{userUsername}, #{userSex}, #{userPhone}, #{userPassword}, #{userIdCard}, #{userAvatar}, #{userStatus}, #{userCreateTime}, #{userNickname}, #{userMail})")
    Boolean addUser(User user);

    /**
     * 通过用户名（账号）查找用户，用来判断用户名是否已被使用
     *
     * @return List<User>
     */
    @Select("select * from user where userUsername = #{username}")
    List<User> getUserByUsername(@Param("username") String username);

    /**
     * 通过邮箱查找用户，用来判断邮箱是否已被注册
     *
     * @return List<User>
     */
    @Select("select * from user where userMail = #{mail}")
    List<User> getUserByMail(@Param("mail") String mail);

    /**
     * 修改用户昵称
     *
     * @param nickname 昵称
     * @param id       用户id
     * @return Integer
     */
    @Update("update user set userNickname = #{nickname} where userId = #{id}")
    Integer updateNicknameById(@Param("nickname") String nickname, @Param("id") String id);

    /**
     * 修改用户性别
     *
     * @param sex 性别
     * @param id  用户id
     * @return Integer
     */
    @Update("update user set userSex = #{sex} where userId = #{id}")
    Integer updateSexById(@Param("sex") String sex, @Param("id") String id);

    /**
     * 修改用户电话
     *
     * @param phone 电话
     * @param id    用户id
     * @return Integer
     */
    @Update("update user set userPhone = #{phone} where userId = #{id}")
    Integer updatePhoneById(@Param("phone") String phone, @Param("id") String id);

    /**
     * 获取所有用户
     *
     * @return List<User>
     */
    @Select("select * from user")
    List<User> getAllUsers();

    /**
     * 根据id修改用户信息
     *
     * @param user 用户
     * @return 修改结果条数
     */
    Integer updateUserById(User user);

    /**
     * 根据id查询用户信息
     *
     * @param id 用户id
     * @return User
     */
    @Select("select * from user where userId = #{id}")
    User getUserById(String id);

    /**
     * 通过用户名查询密码
     *
     * @param username 用户名
     * @return String
     */
    @Select("select userPassword from user where userUsername = #{username}")
    String getPasswordByUsername(String username);

    /**
     * 修改密码
     *
     * @param username 用户名
     * @param password 新的密码
     * @return Integer
     */
    @Update("update user set userPassword = #{password} where userUsername = #{username}")
    Integer updatePassword(@Param("username") String username, @Param("password") String password);

    /**
     * 根据条件查询用户
     *
     * @param user 用户
     * @return List<User>
     */
    List<User> getUsersByCondition(User user);
}
